@Lemon
3年前 提问
1个回答

static函数在其他文件中调用方法

齐士忠
3年前

static函数是不能被其他文件直接调用的,可以用间接的方式。

方法一:通过非static函数的方式,我们可以定义一个普通的函数,让这个普通函数调用static函数,然后在把这个普通函数在头文件中声明。

1.cpp)
#include 
#include "2.h"
void main()
{
    struct stru stru1;
    use_my_static(&stru1);
    stru1.f();
}
2.cpp)

#include "2.h"

#include 

static  void my_static()
{
    printf("我是外边的static的函数,我被调用了\n");
}

void use_my_static(struct stru *h)
{
    h->f=my_static;
};
2.h头文件
static void my_static();
struct stru{
    void (*f)();
};
void use_my_static(struct stru *h);

方法二:通过函数指针的方式, 我们只要得到这个函数的地址,那么就一定可以调用它,大家要知道static函数是对编译器起作用的,在运行时根本没有static了,有的只是函数地址,所以只要搞到函数地址管它是不是static的照调不误。

class Hack
{
private:
int x;
public:
int get_x();
static void func(Hack * pthis); // 静态成员函数
void func2(); // 非静态成员函数
};

void Hack::func(Hack * pthis)
{
int y = pthis->get_x(); // 访问对象的数据成员
}